/*
 * Licensed to the Tai Ping Jin Ke
 *
 * Copyright (c) 2022 .
 * All rights reserved.
 * 项目名称：太平金科-通用能力封装层-执行http网络请求
 * 版权说明：本软件属太平金融科技服务(上海)有限公司所有，在未获得太平金融科技服务(上海)有限公司正式授权情况下，任何企业和个人，不能获取、阅读、安装、传播本软件涉及的任何受知识产权保护的内容。
 */
package com.taipingframework.http.handler.impl;

import cn.hutool.http.ContentType;
import cn.hutool.http.HttpRequest;
import com.taipingframework.utility.http.constant.TimeoutEnum;
import com.taipingframework.http.handler.HttpRequestHandler;
import com.taipingframework.http.handler.IHttpRequestHandler;
import com.taipingframework.utility.http.ServiceConfigInfo;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;

/**
 * HTTP GET 请求 处理器
 */
@Component("GET")
public final class GetHandler extends HttpRequestHandler implements IHttpRequestHandler {

    @Override
    public HttpRequest executeHttpRequest(ServiceConfigInfo serviceConfigInfo) {
        // 验证content-type
        if (!MediaType.APPLICATION_FORM_URLENCODED_VALUE.equalsIgnoreCase(super.serviceRequestConfigInfo.getContentType())) {
            throw new RuntimeException("未处理的Content-Type：" + super.serviceRequestConfigInfo.getContentType());
        }

        super.response.setRequestBodyJson(super.urlParam);

        // 构造HTTP GET请求对象
        return HttpRequest
                .get(super.requestUrl)
                .contentType(ContentType.FORM_URLENCODED.getValue())
                .headerMap(super.requestHeaderMap, true)
                .timeout(TimeoutEnum.WEB_SERVICE_TIMEOUT.getTimeout());
    }

}
